package com.ias.agdis_r.volley.callback;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkError;
import com.android.volley.NoConnectionError;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.ServerError;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;

/**
 * Volley错误处理基类，定义对不同错误类型的回调接口，同时包装有对错误的统一处理类
 * 
 * @author qibo.yu
 *
 */
public abstract class BaseOnVolleyErrorListener implements Response.ErrorListener {

	/** 该类负责对异常进行统一基础处理 */
	private MyOnErrorListener commonErrCalback = MyOnErrorListener.getInstance();

	/**
	 * 有错误发生时该方法将被调用
	 * 
	 * @param volleyError
	 */
	abstract void onErrorOccurred(VolleyError volleyError);

	/**
	 * 网络超时
	 * 
	 * @param e
	 */
	abstract void onTimeoutError(TimeoutError e);

	/**
	 * 服务器异常
	 * 
	 * @param e
	 */
	abstract void onServerError(ServerError e);

	/**
	 * 数据解析异常
	 * 
	 * @param e
	 */
	abstract void onParseError(ParseError e);

	/**
	 * 网络异常
	 * 
	 * @param e
	 */
	abstract void onNetworkError(NetworkError e);

	/**
	 * 权限验证失败
	 * 
	 * @param e
	 */
	abstract void onAuthFailureError(AuthFailureError e);

	/**
	 * 无连接
	 * 
	 * @param e
	 */
	abstract void onNoConnectionError(NoConnectionError e);

	@Override
	public final void onErrorResponse(VolleyError err) {
		commonErrCalback.onErrorResponse(err);

		onErrorOccurred(err);

		// 为不同错误添加回调接口
		if (err instanceof TimeoutError) {
			this.onTimeoutError((TimeoutError) err);
		} else if (err instanceof ServerError) {
			this.onServerError((ServerError) err);
		} else if (err instanceof ParseError) {
			this.onParseError((ParseError) err);
		} else if (err instanceof NetworkError) {
			this.onNetworkError((NetworkError) err);
		} else if (err instanceof AuthFailureError) {
			this.onAuthFailureError((AuthFailureError) err);
		} else if (err instanceof NoConnectionError) {
			this.onNoConnectionError((NoConnectionError) err);
		}
	}

}
